<?php
/**
 * Created by PhpStorm.
 * User: edmmss
 * Date: 2018/12/28
 * Time: 20:38
 */

namespace app\modules\nullObject\controller;

use app\modules\nullObject\NullLogger;
use app\modules\nullObject\PrintLogger;
use app\modules\nullObject\Service;
use app\modules\nullObject\ShopAddressRepository;
use yii\web\Controller;

class DefaultController extends Controller
{
    /**
     * 空对象模式示例
     * 空对象模式不属于 GoF 设计模式，但是它作为一种经常出现的套路足以被视为设计模式了。它具有如下优点：
     * 1.客户端代码简单
     * 2.可以减少报空指针异常的几率
     * 3.测试用例不需要考虑太多条件
     * 返回一个对象或 null 应该用返回对象或者 NullObject 代替。NullObject 简化了死板的代码，消除了客户端代码中的条件检查，
     * 例如 if (!is_null($obj)) { $obj->callSomething(); } 只需 $obj->callSomething(); 就行。
     *
     * @date   2018/12/29
     * @author edmmss
     * @return bool
     */
    public function actionIndex()
    {
        $service = new Service(new NullLogger());
        $service->doSomething();

        $service = new Service(new PrintLogger());
        $service->doSomething();

        $shopAddress = (new ShopAddressRepository())->findShopAddressById(1);

        var_dump($shopAddress->isEntity());
        var_dump($shopAddress->getEntity());

        echo '<hr>';

        return true;
    }
}